package negocio;

import java.util.Collection;
import java.util.List;

import negocio.exception.LoginInvalido;
import negocio.exception.UsuarioInexistente;
import basica.Categoria;
import basica.Produto;
import basica.Usuario;

public class Fachada implements IFachada {
	
	private UsuarioNegocio usuarioNegocio;
	private ProdutoNegocio produtoNegocio;
	private UsuarioProdutoNegocio usuarioProdutoNegocio;
	
	private static IFachada instancia;
	
	public static IFachada getInstancia(){
		if (instancia == null){
			instancia = new Fachada();
		} 
		return instancia;
	}
	
	private Fachada(){
		usuarioNegocio = new UsuarioNegocio();
		produtoNegocio = new ProdutoNegocio();
		usuarioProdutoNegocio = new UsuarioProdutoNegocio();
	}

	// ==================================================
	// MÉTODOS DE USUÁRIO
	// ==================================================

	public Usuario efetuarLogin(String login, String senha) throws LoginInvalido{
		return usuarioNegocio.efetuarLogin(login, senha);
	}
	
	@Override
	public void inserirOuAtualizar(Usuario usuario) {
		usuarioNegocio.inserir(usuario);
	}
	
	@Override
	public void desativarUsuario(Usuario usuario) throws UsuarioInexistente {
		// TODO Auto-generated method stub
		
	}

	@Override
	public List<Usuario> consultarTodosUsuario() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Usuario consultarUsuarioPorId(Integer id) {
		return usuarioNegocio.consultarPorId(id);
	}

	@Override
	public Usuario consultarUsuarioPorCPF(String cpf) {
		// TODO Auto-generated method stub
		return null;
	}


	// ==================================================
	// MÉTODOS DE PRODUTO
	// ==================================================

	@Override
	public void inserirProduto(Produto produto) {
		produtoNegocio.inserirProduto(produto);
	}

	@Override
	public List<Produto> consultarTodosProdutos() {
		return produtoNegocio.consultarTodosProdutos();
	}

	// ==================================================
	// MÉTODOS DE CATEGORIA
	// ==================================================
	

	@Override
	public void inserir(Categoria entidade) {
		produtoNegocio.inserir(entidade);
	}

	@Override
	public List<Categoria> consultarTodosCategorias() {
		return produtoNegocio.consultarTodosCategorias();
	}

	
	// ==================================================
	// MÉTODOS DE CATEGORIA
	// ==================================================

	@Override
	public void inserirProdutoListaUsuario(Usuario usuario, Collection<Produto> selecaoProduto) {
		usuarioProdutoNegocio.inserirProdutoListaUsuario(usuario, selecaoProduto);
	}
	
	
	
	
}
